/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package javamus;

import java.util.ArrayList;
import java.util.Collections;

/**
 *
 * @author jose
 */
public class PlayerExtend implements Player{

    Carta c1,c2,c3,c4;
    MesaSwing p;
    String nombre;
    int equipo;
    public int posicion = 0;
     
    public String getNombre(){
        return nombre;
    }
    
    public void sumarPuntos(int puntos){
        if (equipo==1){
            p.m.incrementarPuntosE1(puntos);
        }
        if (equipo==2){
            p.m.incrementarPuntosE2(puntos);
        }
    }
    
    public boolean tengoJuego() {
        int total = c1.valorJuego()+c2.valorJuego()+c3.valorJuego()+c4.valorJuego();
        if (total >= 31)
            return true;
        else return false;

    }

    public int puntosPares() {
        if ((c1.valorGrandes()==c2.valorGrandes())&&(c3.valorGrandes()==c4.valorGrandes())) return 3;
        if ((c1.valorGrandes()==c3.valorGrandes())&&(c2.valorGrandes()==c4.valorGrandes())) return 3;
        if ((c1.valorGrandes()==c4.valorGrandes())&&(c3.valorGrandes()==c2.valorGrandes())) return 3;
        
        if ((c1.valorGrandes()==c2.valorGrandes())&&(c2.valorGrandes()==c3.valorGrandes())) return 2;
        if ((c1.valorGrandes()==c2.valorGrandes())&&(c2.valorGrandes()==c4.valorGrandes())) return 2;
        if ((c2.valorGrandes()==c3.valorGrandes())&&(c3.valorGrandes()==c4.valorGrandes())) return 2;
        if ((c1.valorGrandes()==c3.valorGrandes())&&(c3.valorGrandes()==c4.valorGrandes())) return 2;
        
        if (c1.valorGrandes()==c2.valorGrandes()) return 1;
        if (c1.valorGrandes()==c3.valorGrandes()) return 1;
        if (c1.valorGrandes()==c4.valorGrandes()) return 1;
        if (c2.valorGrandes()==c3.valorGrandes()) return 1;
        if (c2.valorGrandes()==c4.valorGrandes()) return 1;
        if (c3.valorGrandes()==c4.valorGrandes()) return 1;      
        
        return 0;
    }
    
    public int valorPares(){
        if (puntosPares()==1){
            if (c1.valorGrandes()==c2.valorGrandes()) return c1.valorGrandes()*10;
            if (c1.valorGrandes()==c3.valorGrandes()) return c1.valorGrandes()*10;
            if (c1.valorGrandes()==c4.valorGrandes()) return c1.valorGrandes()*10;
            if (c2.valorGrandes()==c3.valorGrandes()) return c2.valorGrandes()*10;
            if (c2.valorGrandes()==c4.valorGrandes()) return c2.valorGrandes()*10;
            if (c3.valorGrandes()==c4.valorGrandes()) return c3.valorGrandes()*10;      
        }
        
        if(puntosPares()==2){
            if ((c1.valorGrandes()==c2.valorGrandes())&&(c2.valorGrandes()==c3.valorGrandes())) return c1.valorGrandes()*100;
            if ((c1.valorGrandes()==c2.valorGrandes())&&(c2.valorGrandes()==c4.valorGrandes())) return c1.valorGrandes()*100;
            if ((c2.valorGrandes()==c3.valorGrandes())&&(c3.valorGrandes()==c4.valorGrandes())) return c2.valorGrandes()*100;
            if ((c1.valorGrandes()==c3.valorGrandes())&&(c3.valorGrandes()==c4.valorGrandes())) return c1.valorGrandes()*100;
        }
        
        if(puntosPares()==3){
            if ((c1.valorGrandes()==c2.valorGrandes())&&(c3.valorGrandes()==c4.valorGrandes()))
            {
                if(c1.valorGrandes()>c3.valorGrandes()) return (c1.valorGrandes() * 1000 + c3.valorGrandes());
                else return (c3.valorGrandes() * 1000 + c1.valorGrandes());
            }
            if ((c1.valorGrandes()==c3.valorGrandes())&&(c2.valorGrandes()==c4.valorGrandes())) 
            {
                if(c1.valorGrandes()>c2.valorGrandes()) return (c1.valorGrandes() * 1000 + c2.valorGrandes());
                else return (c2.valorGrandes() * 1000 + c1.valorGrandes());
            }
            if ((c1.valorGrandes()==c4.valorGrandes())&&(c3.valorGrandes()==c2.valorGrandes())) 
            {
                if(c1.valorGrandes()>c3.valorGrandes()) return (c1.valorGrandes() * 1000 + c3.valorGrandes());
                else return (c3.valorGrandes() * 1000 + c1.valorGrandes());
            }
        }
        if (puntosPares()==0) return 0;
        return 0;
    }
    
    public int valorChicas() {
        ArrayList<Integer> a = new ArrayList();
        a.add(c1.valorGrandes());
        a.add(c2.valorGrandes());
        a.add(c3.valorGrandes());
        a.add(c4.valorGrandes());
        Collections.sort(a);        
        int t = a.remove(3) * 1;        
         t = t + a.remove(2) *10;
         t = t + a.remove(1) * 100;
         t = t + a.remove(0) * 1000;
        return t;
        
    }

    public boolean pares() {
        if (this.puntosPares() > 0) return true;
        return false;
    }

    public boolean preguntarMus() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void tomarCartas(Mazo m){
        this.c1 = m.sacarCarta(c1);
        this.c2 = m.sacarCarta(c2);
        this.c3 = m.sacarCarta(c3);
        this.c4 = m.sacarCarta(c4);
    }

    public void preguntarGrandes(Marcador m) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void preguntarChicas(Marcador m) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void preguntarPares(Marcador m) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void preguntarJuego(Marcador m) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public int valorCarta1() {
        return c1.getValor();
    }

    public int valorCarta2() {
        return c2.getValor();
    }

    public int valorCarta3() {
        return c3.getValor();
    }

    public int valorCarta4() {
        return c4.getValor();
    }
    
    public int valorJuego() {
        return c1.valorJuego()+c2.valorJuego()+c3.valorJuego()+c4.valorJuego();

    }
     public int valorGrandes() {
        ArrayList<Integer> a = new ArrayList();
        a.add(c1.valorGrandes());
        a.add(c2.valorGrandes());
        a.add(c3.valorGrandes());
        a.add(c4.valorGrandes());
        Collections.sort(a);
        int t = a.remove(3) * 1000;        
         t = t + a.remove(2) *100;
         t = t + a.remove(1) * 10;
         t = t + a.remove(0);
        return t;
        
    }

   public void mostrarCartas() {
        if(this.posicion == 4) p.MostrarCartasO(this);
        if(this.posicion == 3) p.MostrarCartasN(this);
        if(this.posicion == 2) p.MostrarCartasE(this);
        //this.p.escribir(this.nombre + "> " + c1.valor+" "+ c2.valor+" "+ c3.valor+" "+ c4.valor);

    }

    public void setEquipo(int a) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public int getEquipo(int a) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void cambiarCartas(Mazo m) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    public void apuestaGrande(Marcador m,int apuesta){
        m.apuestaGrande += m.apuestaV;
        m.apuestaV =  apuesta;
        m.apuesta = true;
        m.aumenta = true;
        m.pasa = false;
        if (m.apuestaGrande == 0)
            p.escribir(this.getNombre() + "> Apuesta "+apuesta+" a grandes. ");
        else
            p.escribir(this.getNombre() + "> Subo "+apuesta+" a grandes. ");
        
    }
    
    public void apuestaJuego(Marcador m,int apuesta){
        m.apuestaJuego += m.apuestaV;
        m.apuestaV =  apuesta;
        m.apuesta = true;
        m.aumenta = true;
        m.pasa = false;
        p.escribir(this.getNombre() + "> Apuesta "+apuesta+" a juego. ");
    }
    
    public void apuestaPares(Marcador m,int apuesta){
        m.apuestaPares += m.apuestaV;
        m.apuestaV =  apuesta;
        m.apuesta = true;
        m.aumenta = true;
        m.pasa = false;
        p.escribir(this.getNombre() + "> Apuesta "+apuesta+" a pares. ");
    }
    
    public void apuestaChicas(Marcador m,int apuesta){
        m.apuestaChica += m.apuestaV;
        m.apuestaV =  apuesta;
        m.apuesta = true;
        m.aumenta = true;
        m.pasa = false;
        p.escribir(this.getNombre() + "> Apuesta "+apuesta+" a chicas. ");
    }
    
    public void verGrandes(Marcador m){
        m.apuestaGrande += m.apuestaV;
        m.pasa = false;
        m.aumenta  = false;
        m.apuesta = false;
        m.ganaGrande = 3;
        p.escribir(this.getNombre() + "> Veo " + m.apuestaGrande);
    }
    
    public void verJuego(Marcador m){
        m.apuestaJuego += m.apuestaV;
        m.pasa = false;
        m.aumenta  = false;
        m.apuesta = false;
        m.ver = true;
        m.ganaJuego = 3;
        p.escribir(this.getNombre() + "> Veo " + m.apuestaJuego);
    }
    
    public void verChicas(Marcador m){
        m.apuestaChica += m.apuestaV;
        m.pasa = false;
        m.aumenta  = false;
        m.apuesta = false;
        m.ganaChicas = 3;
        p.escribir(this.getNombre() + "> Veo " + m.apuestaChica);
    }
    
    public void verPares(Marcador m){
        m.apuestaPares += m.apuestaV;
        m.pasa = false;
        m.aumenta  = false;
        m.apuesta = false;
        m.ganaPares = 3;
        p.escribir(this.getNombre() + "> Veo " + m.apuestaPares);
    }
    
    public void pasa(Marcador m){
            m.pasa = true;
            m.aumenta = false;
            this.p.escribir(this.nombre + "> "+"paso");
    }
}
